#include "musiclist.h"
#include <QVector>


MusicList::MusicList()
{

}




//QMimeDatabase mimeDB;
//QMimeType mimeType = mimeDB.mimeTypeForFile(e.toLocalFile());
//QString mime = mimeType.name();

void MusicList::addMusicsByUrl(const QList<QUrl> &musicUlrs)
{
    //将所有的音乐放到musicList
    for(auto e : musicUlrs)
    {
        //文件重复过滤，如果该文件已经在musicList中，就不在添加,过滤方式，将当前要添加到musciList中的文件的路径，与musicList中已经存在的歌曲
        //文件路径对比，如果相同则歌曲已经存在，如果不同说明还没有添加过，则添加。但是这样找，时间复杂度是比较高的
        //当歌曲比较多的时候，可能就会出问题了。
//        auto it = begin();
//        for( ; it != end(); it++)
//        {
//            if(it->getMusicQurl() == e)
//            {
//                break;
//            }
//        }

//        if(it != end())
//        {
//            continue;
//        }

        //所以建议用这个下面的hash的方式来去重，这样效率非常高
        QString musicPath = e.toLocalFile();

        qDebug() << "----------------------------------------";

        qDebug() << musicPath;

        qDebug() << "----------------------------------------";
        if(musicPaths.contains(musicPath))
               continue;

        //说明歌曲不存在，需要添加到musicPath
        musicPaths.insert(musicPath);

        //如果musicUrl是一个有效的歌曲文件，就需要添加到歌曲列表中，检测歌曲文件的mime类型
        // QMimeDatabase  --检查文件的Mime类型，
        QMimeDatabase mimeDB;
        QMimeType mimeType  = mimeDB.mimeTypeForFile(e.toLocalFile());  //toLocalFile将url转换为一个QString的路径
        QString mime = mimeType.name();

       // qDebug() << e << ":" << mime;
        //mime 和 audio/mepg:mp3  audio/flac 无损音乐  audio/wav
        if(mime == "audio/mpeg" || mime == "audio/flac" || mime == "audio/wav")
        {
            //需要将url创建一个Music对象，添加到musicList中
            Music music(e);
            musicList.push_back(music);
        }
    }
}


typename QVector<Music>::iterator MusicList::begin()
{
    return musicList.begin();
}

typename QVector<Music>::iterator MusicList::end()
{
    return musicList.end();
}

typename QVector<Music>::iterator MusicList::findMusicByMusicId(const QString &musicId)
{
    for(auto it = begin() ; it != end(); it++)
    {
        if(it->getMusicId() == musicId)
            return it;
    }

    return end();
}



void MusicList::writeToMusicDB()
{
    for(auto e : musicList)
    {
        //拿到每一个music对象以后，将music的所有属性写入到数据库
        //具体写入单个Music对象的操作将其封装成一个函数
        e.InsertMusicDB();
    }
}


void MusicList::readFromDB()
{
    QSqlQuery query;
    query.prepare("select musicId, musicName, musicSinger, albumName, musicUrl,\
                   duration, isLike, isHistory from MusicInfo");
    if(!query.exec())
    {
         qDebug() << "数据库查询失败!!!!";
          return;
    }

    while(query.next())
    {
        Music music;
        music.setMusicId(query.value(0).toString());
        music.setMusicName(query.value(1).toString());
        music.setMusicSinger(query.value(2).toString());
        music.setMusicAlbum(query.value(3).toString());
        music.setMusicQurl(query.value(4).toString());  //这个设置进去的是QUrl，不是本地的localfile
        music.setMusicDuration(query.value(5).toULongLong());
        music.setIsLike(query.value(6).toBool());
        music.setIsHistory(query.value(7).toBool());
        musicList.push_back(music);
        qDebug() << "========================================";
        qDebug() << music.getMusicQurl().toLocalFile();
        qDebug() << "========================================";
        musicPaths.insert(music.getMusicQurl().toLocalFile());
    }
}




